The Java Naming and Directory Interface is an interface that allows clients to look-up an object (a data item) via a name. The Java Naming and Directory Interface essentially provides a mechanism for binding an object to a name, and a directory lookup interface that allows a client who wises to retrieve an object to enter a query.
Service locators that use JNDI for location of a service object are known. This addresses the problem that different clients use JNDI in different ways, for example EJB (Enterprise JavaBeans) clients use JNDI to look up EJBHome objects by using the enterprise bean's registered JNDI name, where JMS (Java Messaging Service) clients need to look up JMS components by using the JNDI names registered for JMS components. It proposes a “Service Locator object” that can abstract all JNDI usage and hide the complexities of initial context creation, EJB home object lookup, and EJB object re-creation. Multiple clients can reuse the Service Locator object to reduce code complexity and provide a single point of control.
However, with EJB 3.0 (Enterprise JavaBeans 3.0) and IOC (Inversion of Control), the usefulness of the existing Service Locator pattern is reduced as beans are injected with annotations instead of being looked up from the JNDI. Furthermore, it covers only abstraction of the JNDI usage and initial context creation.